package cn.com.cfae.iras.doc.analyze.components.iaad;

import cn.com.cfae.iras.doc.analyze.beans.iaad.IaadIndicatorGradeDetail;
import cn.com.cfae.iras.doc.analyze.beans.iaad.IndustryIndicatorList;
import cn.com.cfae.iras.doc.analyze.beans.web.ContentAndPosition;
import cn.com.cfae.iras.doc.analyze.components.BaseComponent;
import cn.com.cfae.iras.doc.analyze.components.beans.ComponentResult;
import cn.com.cfae.iras.doc.analyze.components.integrity.I1001;
import cn.com.cfae.iras.doc.analyze.config.ApplicationContextHelper;
import cn.com.cfae.iras.doc.analyze.parse.kv.KVText;
import cn.com.cfae.iras.doc.analyze.parse.model.DocumentModel;
import cn.com.cfae.iras.doc.analyze.parse.model.ExtractBizModel;
import cn.com.cfae.iras.doc.analyze.parse.model.ExtractItem;
import com.google.gson.GsonBuilder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by 佟媛媛 on 18/11/7.
 * 高速公路
 */

@Component("GSGL04")
@Scope("prototype")
public class GSGL04  extends BaseComponent {

    private static Logger log = LoggerFactory.getLogger(GSGL04.class);

    public List<IaadIndicatorGradeDetail> handlerIAAD(){
        List<IaadIndicatorGradeDetail> list = new ArrayList<>();
        List<IaadIndicatorGradeDetail> KYL = getKYL();//公路客运量（亿人）
        if(CollectionUtils.isNotEmpty(KYL)) list.addAll(KYL);
        List<IaadIndicatorGradeDetail> HYL = getHYL();//公路货运量（亿吨）
        if(CollectionUtils.isNotEmpty(HYL)) list.addAll(HYL);
        List<IaadIndicatorGradeDetail> KYZZL = getKYZZL();//公路客运周转量（亿人公里）
        if(CollectionUtils.isNotEmpty(KYZZL)) list.addAll(KYZZL);
        List<IaadIndicatorGradeDetail> HYZZL = getHYZZL();//公路货运周转量（亿吨公里）
        if(CollectionUtils.isNotEmpty(HYZZL)) list.addAll(HYZZL);
        IaadIndicatorGradeDetail SJYJ = getSJYJ();//是否出具非标准审计意见
        if(SJYJ!=null) list.add(SJYJ);
        IaadIndicatorGradeDetail ZFZ_ZZC = getZFZ_ZZC();//资产负债率
        if(ZFZ_ZZC!=null) list.add(ZFZ_ZZC);
        IaadIndicatorGradeDetail HDXJL_DQJK = getHDXJL_DQJK();//经营活动现金流入量/短期借款（倍）
        if(HDXJL_DQJK!=null) list.add(HDXJL_DQJK);
        IaadIndicatorGradeDetail ZFZ_EBITDA = getZFZ_EBITDA();//全部债务/EBITDA（倍)
        if(ZFZ_EBITDA!=null) list.add(ZFZ_EBITDA);
        IaadIndicatorGradeDetail JLR_ZZC = getJLR_ZZC();//总资产报酬率
        if(JLR_ZZC!=null) list.add(JLR_ZZC);
        IaadIndicatorGradeDetail SXZC_ZZC = getSXZC_ZZC();//受限资产比重
        if(SXZC_ZZC!=null) list.add(SXZC_ZZC);
        IaadIndicatorGradeDetail YYSR_LRZE = getYYSR_LRZE();//营业外收入占利润总额的比重
        if(YYSR_LRZE!=null) list.add(YYSR_LRZE);
        IaadIndicatorGradeDetail CWFY_YYSR = getCWFY_YYSR();//财务费用占营业收入的比重
        if(CWFY_YYSR!=null) list.add(CWFY_YYSR);
        log.info("高速公路行业指标：{}",new GsonBuilder().create().toJson(list));
        return list;
    }

    //公路客运量（亿人）
    /**
     1、公路客运量（亿人） --》KYL
     "1、根据省交投平台、市县级交投平台确定主体对象；
     2、如果是省级，抽取省级数据；如果是市县级抽取市县级数据；"
     */
    private List<IaadIndicatorGradeDetail> getKYL(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("GLKYL");
            int pageNum = getChapterModel("M-5").getStartPage();
            List<IaadIndicatorGradeDetail> list = new ArrayList<>();
            List<KVText> kvTextList = getKVTextValues("M-5","GSGL","KYL");
            if(CollectionUtils.isNotEmpty(kvTextList)){
                for(KVText kvText : kvTextList){
                    String value = kvText.getText();
                    double v = getDouble(value);
                    List<ContentAndPosition> textPositionList = getContentAndPositionList2(kvText);
                    if(StringUtils.isEmpty(value)){
                        continue;
                    }
                    IaadIndicatorGradeDetail iaadIndicatorGradeDetail = getIaadIndicatorGradeDetail(indicator,textPositionList,doubleToBigDecimal(v),pageNum,value,String.format("公路客运量%s",value));
                    if(iaadIndicatorGradeDetail!=null) list.add(iaadIndicatorGradeDetail);
                }
            }
            return list;
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //公路货运量（亿吨）
    /**
     2、公路货运量（亿吨） --》HYL
     "1、根据省交投平台、市县级交投平台确定主体对象；
     2、如果是省级，抽取省级数据；如果是市县级抽取市县级数据；"
     */
    private List<IaadIndicatorGradeDetail> getHYL(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("GKHYL");
            int pageNum = getChapterModel("M-5").getStartPage();
            List<IaadIndicatorGradeDetail> list = new ArrayList<>();
            List<KVText> kvTextList = getKVTextValues("M-5","GSGL","HYL");
            if(CollectionUtils.isNotEmpty(kvTextList)){
                for(KVText kvText : kvTextList){
                    String value = kvText.getText();
                    double v = getDouble(value);
                    List<ContentAndPosition> textPositionList = getContentAndPositionList2(kvText);
                    if(StringUtils.isEmpty(value)){
                        continue;
                    }
                    IaadIndicatorGradeDetail iaadIndicatorGradeDetail = getIaadIndicatorGradeDetail(indicator,textPositionList,doubleToBigDecimal(v),pageNum,value,String.format("公路货运量%s",value));
                    if(iaadIndicatorGradeDetail!=null) list.add(iaadIndicatorGradeDetail);
                }
            }
            return list;
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //公路客运周转量（亿人公里）
    /**
     3、公路客运周转量（亿人公里） --》KYZZL
     "1、根据省交投平台、市县级交投平台确定主体对象；
     2、如果是省级，抽取省级数据；如果是市县级抽取市县级数据；"
     */
    private List<IaadIndicatorGradeDetail> getKYZZL(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("GLKYZZL");
            List<IaadIndicatorGradeDetail> list = new ArrayList<>();
            int pageNum = getChapterModel("M-5").getStartPage();
            List<KVText> kvTextList = getKVTextValues("M-5","GSGL","KYZZL");
            if(CollectionUtils.isNotEmpty(kvTextList)){
                for(KVText kvText : kvTextList){
                    String value = kvText.getText();
                    double v = getDouble(value);
                    List<ContentAndPosition> textPositionList = getContentAndPositionList2(kvText);
                    if(StringUtils.isEmpty(value)){
                        continue;
                    }
                    IaadIndicatorGradeDetail iaadIndicatorGradeDetail = getIaadIndicatorGradeDetail(indicator,textPositionList,doubleToBigDecimal(v),pageNum,value,String.format("公路客运周转量%s",value));
                    if(iaadIndicatorGradeDetail!=null) list.add(iaadIndicatorGradeDetail);
                }
            }
            return list;
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //公路货运周转量（亿吨公里）
    /**
     4、公路货运周转量（亿吨公里） --》HYZZL
     "1、根据省交投平台、市县级交投平台确定主体对象；
     2、如果是省级，抽取省级数据；如果是市县级抽取市县级数据；"
     */
    private List<IaadIndicatorGradeDetail> getHYZZL(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("GLHYZZL");
            List<IaadIndicatorGradeDetail> list = new ArrayList<>();
            int pageNum = getChapterModel("M-5").getStartPage();
            List<KVText> kvTextList = getKVTextValues("M-5","GSGL","HYZZL");
            if(CollectionUtils.isNotEmpty(kvTextList)){
                for(KVText kvText : kvTextList){
                    String value = kvText.getText();
                    double v = getDouble(value);
                    List<ContentAndPosition> textPositionList = getContentAndPositionList2(kvText);
                    if(StringUtils.isEmpty(value)){
                        continue;
                    }
                    IaadIndicatorGradeDetail iaadIndicatorGradeDetail = getIaadIndicatorGradeDetail(indicator,textPositionList,doubleToBigDecimal(v),pageNum,value,String.format("公路货运周转量%s",value));
                    if(iaadIndicatorGradeDetail!=null) list.add(iaadIndicatorGradeDetail);
                }
            }
            return list;
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //是否出具非标准审计意见
    /**
     5、是否出具非标准审计意见 --》SJYJ
     --》M-6、关键字
     1、关键词匹配；
     */
    private IaadIndicatorGradeDetail getSJYJ(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("SJYJ");
            Map<String,String> keywords = new HashMap<>();
            keywords.put("标准无保留","5");
            keywords.put("带强调段的无保留","20");
            keywords.put("保留意见","100");
            Class clazz = Class.forName("cn.com.cfae.iras.doc.analyze.components.integrity.I1001");
            I1001 i1001 = (I1001) ApplicationContextHelper.getBean("I1001");
            Method setExtractData = clazz.getMethod("setExtractData", DocumentModel.class);
            setExtractData.invoke(i1001, getExtractData());
            Method ifKeywordExist2 = clazz.getMethod("ifKeywordExist2", String.class);
            IaadIndicatorGradeDetail detail = sjyj(i1001,"带强调段的无保留",ifKeywordExist2,keywords,indicator,"20");
            if(detail!=null){
                return detail;
            }else{
                IaadIndicatorGradeDetail detail1 = sjyj(i1001,"标准无保留",ifKeywordExist2,keywords,indicator,"5");
                if(detail1!=null){
                    return detail1;
                }else{
                    return sjyj(i1001,"保留意见",ifKeywordExist2,keywords,indicator,"100");
                }
            }
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    private IaadIndicatorGradeDetail sjyj(I1001 i1001,String key,Method ifKeywordExist2,Map<String,String> keywords,IndustryIndicatorList indicator,String thresholdScore) throws Exception{
        i1001.setKeyword(key);
        Map map = (Map)ifKeywordExist2.invoke(i1001, "M-6");
        if(MapUtils.isNotEmpty(map)){
            boolean boo = (boolean)map.get("exist");
            if(boo){
                double score = Double.valueOf(keywords.get(key))*Double.valueOf(indicator.getWeight());
                return getIaadIndicatorGradeDetail(indicator,key, getTwoDecimal(score)+"", key,thresholdScore, (int)map.get("pageNum"), key);
            }
        }
        return null;
    }

    //资产负债率
    /**
     6、资产负债率（%） --》负债总额（负债总计、总负债）/资产总额（资产总计、总资产）--》ZFZ/ZZC
     --》M-6、ZCFZ.FZHJ、ZCFZ.ZCZJ
     "1、从M-6-2文字表述中获取最近一年年报，偿债能力分析章节，"
     单位：%
     */
    private IaadIndicatorGradeDetail getZFZ_ZZC(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("ZCFZL");
            //        直接抽取
            String ZCFZLS = null;
            double ZCFZLD = 0;
            int pageNum = getChapterModel("M-6").getStartPage();
            ExtractBizModel model = getModel("M-6","CZNL");
            Map<String, ExtractItem> CZNLcol = model.getTable(getJYN(model.getTables()));
            if(MapUtils.isNotEmpty(CZNLcol) && CZNLcol.get("ZCFZL")!=null && CZNLcol.get("ZCFZL").getValue()!=null){
                ZCFZLS = CZNLcol.get("ZCFZL").getValue().getText();
                ZCFZLD = getTwoDecimal(getDouble(ZCFZLS));
                pageNum = CZNLcol.get("ZCFZL").getValue().getPageNumber();
            }
            if(StringUtils.isEmpty(ZCFZLS)){
                return null;
            }
            if(!ZCFZLS.contains("%")) ZCFZLS=ZCFZLS+"%";
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(ZCFZLD),"",pageNum,String.format("近一年资产负债率%s",ZCFZLS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
//        公式计算
//        String FZHJS =null,ZCZJS = null;
//        double FZHJ1 =0,ZCZJ1 = 0,v1=0;
//        int pageNum = getChapterModel("M-6").getStartPage();
//        Map<String, ExtractItem> col1 = getModel("M-6","ZCFZ").getTable(getJYN());
//        if(MapUtils.isNotEmpty(col1)){
//            if(col1.get("FZHJ")!=null && col1.get("FZHJ").getValue()!=null){
//                FZHJS = col1.get("FZHJ").getValue().getText();
//                FZHJ1 = getDouble(FZHJS);
//            }
//            if(col1.get("ZCZJ")!=null && col1.get("ZCZJ").getValue()!=null){
//                ZCZJS = col1.get("ZCZJ").getValue().getText();
//                ZCZJ1 = getDouble(ZCZJS);
//            }
//            if(FZHJ1!=0 && ZCZJ1!=0){
//                v1 = getTwoDecimal(FZHJ1/ZCZJ1);
//            }
//        }
//        if(StringUtils.isEmpty(FZHJS) && StringUtils.isEmpty(ZCZJS)){
//            return null;
//        }
//        return getIaadIndicatorGradeDetail(indicator,v1+"",pageNum,String.format("近一年负债总额%s，近一年资产总额%s",FZHJS,ZCZJS));
    }

    //经营活动现金流入量/短期借款（倍）
    /**
     7、经营活动现金流入量/短期借款（倍） --》HDXJL/DQJK
     --》M-6、XJLL.JYHDCSXJLL、ZCFZ.DQJK
     "1、从三表获取；
     2、取最近一年年报；"
     单位：倍
     */
    private IaadIndicatorGradeDetail getHDXJL_DQJK(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("YYXHDXJLRL");
            String JYHDCSXJLLS=null,DQJKS=null;
            double JYHDCSXJLL=0,DQJK=0,v=0;
            int pageNum = getChapterModel("M-6").getStartPage();
            ExtractBizModel model = getModel("M-6","XJLL");
            Map<String, ExtractItem> XJLLcol = model.getTable(getJYN(model.getTables()));
            if(MapUtils.isNotEmpty(XJLLcol) && XJLLcol.get("JYHDXJLR")!=null && XJLLcol.get("JYHDXJLR").getValue()!=null){
                JYHDCSXJLLS = XJLLcol.get("JYHDXJLR").getValue().getText();
                JYHDCSXJLL = getDouble(JYHDCSXJLLS);
            }
            ExtractBizModel model1 = getModel("M-6","ZCFZ");
            Map<String, ExtractItem> ZCFZcol = model1.getTable(getJYN(model1.getTables()));
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("DQJK")!=null && ZCFZcol.get("DQJK").getValue()!=null){
                DQJKS = ZCFZcol.get("DQJK").getValue().getText();
                DQJK = getDouble(DQJKS);
            }
            if(JYHDCSXJLL!=0 && DQJK!=0){
                v = getTwoDecimal(JYHDCSXJLL/DQJK);
            }
            if(StringUtils.isEmpty(JYHDCSXJLLS) && StringUtils.isEmpty(DQJKS)){
                return null;
            }
            JYHDCSXJLLS=JYHDCSXJLLS+model.getUnitType();
            DQJKS=DQJKS+model1.getUnitType();
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(v),"",pageNum,String.format("近一年经营活动现金流入量%s，近一年短期借款%s",JYHDCSXJLLS,DQJKS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //全部债务/EBITDA（倍)
    /**
     8、全部债务/EBITDA（倍) --》ZFZ/EBITDA
     --》M-6、ZCFZ.DQJK、ZCFZ.CQJK、ZCFZ.YNNDQFLDFZ、ZCFZ.YFZQ、ZCFZ.YFDQZQ、ZCFZ.YFCQZQ、ZCFZ.QTFLDFZ、CZNL.EBITDA
     短期借款+长期借款+一年内到期非流动负债+应付债券+应付短期债券（如有）+应付长期债券（如有）+其他非流动负债）
     "1、取最近一年年报；
     2、EBITDA：M-6-2文字或者表格获取；
     3、全部债务指有息债务，M-6章节获取，近一年有息债务总计，有息债务总计不存在提示缺失；"
     单位：倍
     */
    private IaadIndicatorGradeDetail getZFZ_EBITDA(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("QBFZ-EBITDA");
            String EBITDAS=null,DQJKS=null,CQJKS=null,YNNDQFLDFZS=null,YFZQS=null,YFDQZQS=null,YFCQZQS=null,QTFLDFZS=null;
            double EBITDA=0,DQJK=0,CQJK=0,YNNDQFLDFZ=0,YFZQ=0,YFDQZQ=0,YFCQZQ=0,QTFLDFZ=0,ALL=0,v=0;
            int pageNum = getChapterModel("M-6").getStartPage();
            ExtractBizModel CZNLmodel = getModel("M-6","CZNL");
            Map<String, ExtractItem> CZNLcol = CZNLmodel.getTable(getJYN(CZNLmodel.getTables()));
            if(MapUtils.isNotEmpty(CZNLcol) && CZNLcol.get("EBITDA_LXBS")!=null && CZNLcol.get("EBITDA_LXBS").getValue()!=null){
                EBITDAS = CZNLcol.get("EBITDA_LXBS").getValue().getText();
                EBITDA = getDouble(EBITDAS);
            }
            ExtractBizModel ZCFZmodel = getModel("M-6","ZCFZ");
            Map<String, ExtractItem> ZCFZcol = ZCFZmodel.getTable(getJYN(ZCFZmodel.getTables()));
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("DQJK")!=null && ZCFZcol.get("DQJK").getValue()!=null){
                DQJKS = ZCFZcol.get("DQJK").getValue().getText();
                DQJK = getDouble(DQJKS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("CQJK")!=null && ZCFZcol.get("CQJK").getValue()!=null){
                CQJKS = ZCFZcol.get("CQJK").getValue().getText();
                CQJK = getDouble(CQJKS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("YNNDQFLDFZ")!=null && ZCFZcol.get("YNNDQFLDFZ").getValue()!=null){
                YNNDQFLDFZS = ZCFZcol.get("YNNDQFLDFZ").getValue().getText();
                YNNDQFLDFZ = getDouble(YNNDQFLDFZS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("YFZQ")!=null && ZCFZcol.get("YFZQ").getValue()!=null){
                YFZQS = ZCFZcol.get("YFZQ").getValue().getText();
                YFZQ = getDouble(YFZQS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("YFDQZQ")!=null && ZCFZcol.get("YFDQZQ").getValue()!=null){
                YFDQZQS = ZCFZcol.get("YFDQZQ").getValue().getText();
                YFDQZQ = getDouble(YFDQZQS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("YFCQZQ")!=null && ZCFZcol.get("YFCQZQ").getValue()!=null){
                YFCQZQS = ZCFZcol.get("YFCQZQ").getValue().getText();
                YFCQZQ = getDouble(YFCQZQS);
            }
            if(MapUtils.isNotEmpty(ZCFZcol) && ZCFZcol.get("QTFLDFZ")!=null && ZCFZcol.get("QTFLDFZ").getValue()!=null){
                QTFLDFZS = ZCFZcol.get("QTFLDFZ").getValue().getText();
                QTFLDFZ = getDouble(QTFLDFZS);
            }
            ALL = DQJK+CQJK+YNNDQFLDFZ+YFZQ+YFDQZQ+YFCQZQ+QTFLDFZ;
            if(EBITDA!=0 && ALL!=0){
                v = getTwoDecimal(ALL/EBITDA);
            }
            if(StringUtils.isEmpty(EBITDAS) && StringUtils.isEmpty(DQJKS) && StringUtils.isEmpty(CQJKS) && StringUtils.isEmpty(YNNDQFLDFZS) &&
                    StringUtils.isEmpty(YFZQS) && StringUtils.isEmpty(YFDQZQS) && StringUtils.isEmpty(YFCQZQS) && StringUtils.isEmpty(QTFLDFZS)){
                return null;
            }
            EBITDAS=EBITDAS+CZNLmodel.getUnitType();
            DQJKS=DQJKS+ZCFZmodel.getUnitType();
            CQJKS=CQJKS+ZCFZmodel.getUnitType();
            YNNDQFLDFZS=YNNDQFLDFZS+ZCFZmodel.getUnitType();
            YFZQS=YFZQS+ZCFZmodel.getUnitType();
            YFDQZQS=YFDQZQS+ZCFZmodel.getUnitType();
            YFCQZQS=YFCQZQS+ZCFZmodel.getUnitType();
            QTFLDFZS=QTFLDFZS+ZCFZmodel.getUnitType();
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(v),"",pageNum, String.format("近一年EBITDA%s，短期借款%s，长期借款%s，一年内到期非流动负债%s，应付债券%s，应付短期债券%s，应付长期债券%s，其他非流动负债%s", EBITDAS,DQJKS,CQJKS,YNNDQFLDFZS,YFZQS,YFDQZQS,YFCQZQS,QTFLDFZS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //总资产报酬率
    /**
     9、总资产报酬率（%） --》净利润/年末总资产 --》JLR/ZZC
     --》M-6、LR.JLR、ZCFZ.ZCZJ
     "1、取最近一年年报；
     2、财务会计科目分析章节获取；
     3、不存在，提示缺失；"
     单位：%
     */
    private IaadIndicatorGradeDetail getJLR_ZZC(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("ZZCBCL");
            //        直接抽取
            String ZCFZLS = null;
            double ZCFZLD = 0;
            int pageNum = getChapterModel("M-6").getStartPage();
            ExtractBizModel model = getModel("M-6","YLNL");
            Map<String, ExtractItem> CZNLcol = model.getTable(getJYN(model.getTables()));
            if(MapUtils.isNotEmpty(CZNLcol) && CZNLcol.get("ZZCBCL")!=null && CZNLcol.get("ZZCBCL").getValue()!=null){
                ZCFZLS = CZNLcol.get("ZZCBCL").getValue().getText();
                ZCFZLD = getTwoDecimal(getDouble(ZCFZLS));
                pageNum = CZNLcol.get("ZZCBCL").getValue().getPageNumber();
            }
            if(StringUtils.isEmpty(ZCFZLS)){
                return null;
            }
            if(!ZCFZLS.contains("%")) ZCFZLS=ZCFZLS+"%";
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(ZCFZLD),"",pageNum,String.format("近一年总资产报酬率%s",ZCFZLS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
//        公式计算
//        Map<String, ExtractItem> JLRcol1 = getModel("M-6","LR").getTable(getSNJYQ()[2]);
//        Map<String, ExtractItem> ZZCcol = getModel("M-6","ZCFZ").getTable(getSNJYQ()[2]);
//        String JLRS=null,ZCZJS=null;
//        double JLR=0,ZCZJ=0,v=0;
//        int pageNum = getChapterModel("M-6").getStartPage();
//        if(MapUtils.isNotEmpty(JLRcol1) && JLRcol1.get("JLR")!=null && JLRcol1.get("JLR").getValue()!=null){
//            JLRS = JLRcol1.get("JLR").getValue().getText();
//            JLR = getDouble(JLRS);
//        }
//        if(MapUtils.isNotEmpty(ZZCcol) && ZZCcol.get("ZCZJ")!=null && ZZCcol.get("ZCZJ").getValue()!=null){
//            ZCZJS = ZZCcol.get("ZCZJ").getValue().getText();
//            ZCZJ = getDouble(ZCZJS);
//        }
//        if(JLR!=0 && ZCZJ!=0){
//            v = getTwoDecimal(JLR/ZCZJ);
//        }
//        if(StringUtils.isEmpty(JLRS) && StringUtils.isEmpty(ZCZJS)){
//            return null;
//        }
//        return getIaadIndicatorGradeDetail(indicator,v+"",pageNum,String.format("近一年净利润%s，近一年总资产%s",JLRS,ZCZJS));
    }

    //受限资产比重
    /**
     10、受限资产比重（%） --》受限资产/总资产 --》SXZC/ZZC
     --》M-6、SXZC.SXZC、ZCFZ.ZCZJ
     受限资产/总资产，取近一期
     单位：%
     */
    private IaadIndicatorGradeDetail getSXZC_ZZC(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("SXZCBZ");
            KVText SXZC_kvText = getKVTextValue("M-6","SXZC","SXZC");
            double SXZC=0,ZCZJ=0,v=0;
            String SXZCS=null,ZCZJS=null;
            int pageNum = getChapterModel("M-6").getStartPage();
            ExtractBizModel model = getModel("M-6","ZCFZ");
            if(SXZC_kvText!=null){
                Map<String, ExtractItem> col = model.getTable(getJYQ(model.getTables()));
                if(MapUtils.isNotEmpty(col) && col.get("ZCZJ")!=null && col.get("ZCZJ").getValue()!=null){
                    SXZCS = SXZC_kvText.getText();
                    SXZC = getDouble(SXZCS);
                    ZCZJS = col.get("ZCZJ").getValue().getText();
                    ZCZJ = getDouble(ZCZJS);
                    if(SXZC!=0 && ZCZJ!=0){
                        v = getTwoDecimal(SXZC/ZCZJ);
                    }
                }
            }
            if(StringUtils.isEmpty(SXZCS) && StringUtils.isEmpty(ZCZJS)){
                return null;
            }
            SXZCS=SXZCS+getModel("M-6","SXZC").getUnitType();
            ZCZJS=ZCZJS+model.getUnitType();
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(v),"%",pageNum,String.format("近一期受限资产%s，近一期总资产%s",SXZCS,ZCZJS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //营业外收入占利润总额的比重
    /**
     11、营业外收入占利润总额的比重（%） --》YYSR/LRZE
     --》M-6、LR.YYSR、LR.LRZE
     "1、从三表获取；
     2、取最近一年年报；
     3、营业外收入/利润总额；"
     单位：%
     */
    private IaadIndicatorGradeDetail getYYSR_LRZE(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("YEWSR-LRZE");
            ExtractBizModel model = getModel("M-6","LR");
            Map<String, ExtractItem> JLRcol = model.getTable(getJYN(model.getTables()));
            double YYWSR=0,LRZE=0,v=0;
            String YYWSRS=null,LRZES=null;
            int pageNum = getChapterModel("M-6").getStartPage();
            if(MapUtils.isNotEmpty(JLRcol) && JLRcol.get("LRZE")!=null && JLRcol.get("LRZE").getValue()!=null){
                LRZES = JLRcol.get("LRZE").getValue().getText();
                LRZE = getDouble(LRZES);
            }
            if(MapUtils.isNotEmpty(JLRcol) && JLRcol.get("YYWSR")!=null && JLRcol.get("YYWSR").getValue()!=null){
                YYWSRS = JLRcol.get("YYWSR").getValue().getText();
                YYWSR = getDouble(YYWSRS);
            }
            if(YYWSR!=0 && LRZE!=0){
                v = getTwoDecimal(YYWSR/LRZE);
            }
            if(StringUtils.isEmpty(YYWSRS) && StringUtils.isEmpty(LRZES)){
                return null;
            }
            YYWSRS=YYWSRS+model.getUnitType();
            LRZES=LRZES+model.getUnitType();
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(v),"%",pageNum,String.format("近一年营业外收入%s，近一年利润总额%s",YYWSRS,LRZES));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    //财务费用占营业收入的比重
    /**
     12、财务费用占营业收入的比重（%） --》 CWFY/YYSR
     --》M-6、LR.CWFY、LR.YYSR
     "1、从三表获取；
     2、取最近一年年报；
     3、财务费用/营业收入；"
     单位：%
     */
    private IaadIndicatorGradeDetail getCWFY_YYSR(){
        try{
            IndustryIndicatorList indicator = getIndustryIndicatorList("CWFY-YYSR");
            ExtractBizModel model = getModel("M-6","LR");
            Map<String, ExtractItem> JLRcol = model.getTable(getJYN(model.getTables()));
            double YYSR=0,CWFY=0,v=0;
            String YYSRS=null,CWFYS=null;
            int pageNum = getChapterModel("M-6").getStartPage();
            if(MapUtils.isNotEmpty(JLRcol) && JLRcol.get("CWFY")!=null && JLRcol.get("CWFY").getValue()!=null){
                CWFYS = JLRcol.get("CWFY").getValue().getText();
                CWFY = getDouble(CWFYS);
            }
            if(MapUtils.isNotEmpty(JLRcol) && JLRcol.get("YYSR")!=null && JLRcol.get("YYSR").getValue()!=null){
                YYSRS = JLRcol.get("YYSR").getValue().getText();
                YYSR = getDouble(YYSRS);
            }
            if(YYSR!=0 && CWFY!=0){
                v = getTwoDecimal(CWFY/YYSR);
            }
            if(StringUtils.isEmpty(YYSRS) && StringUtils.isEmpty(CWFYS)){
                return null;
            }
            CWFYS=CWFYS+model.getUnitType();
            YYSRS=YYSRS+model.getUnitType();
            return getIaadIndicatorGradeDetail(indicator,doubleToBigDecimal(v),"%",pageNum,String.format("近一年财务费用%s，近一年营业收入%s",CWFYS,YYSRS));
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }

    @Override
    public List<ComponentResult> handlerM() {
        return null;
    }

    @Override
    public List<ComponentResult> handlerBM() {
        return null;
    }

    @Override
    public List<ComponentResult> handlerDM() {
        return null;
    }

    @Override
    public List<ComponentResult> handlerBDM() {
        return null;
    }
}
